package com.yunbiji.demo.service.impl;

import com.yunbiji.demo.dao.CnNoteDao;
import com.yunbiji.demo.entity.CnNote;
import com.yunbiji.demo.service.CnNoteService;
import com.yunbiji.demo.util.NoteResult;
import com.yunbiji.demo.util.NoteUtil;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * (CnNote)表服务实现类
 *
 * @author makejava
 * @since 2021-06-02 08:40:15
 */
@Service("cnNoteService")
public class CnNoteServiceImpl implements CnNoteService {
    @Resource
    private CnNoteDao cnNoteDao;

    /**
     * 通过ID查询单条数据
     *
     * @param cnNoteId 主键
     * @return 实例对象
     */
    @Override
    public CnNote queryById(String cnNoteId) {
        return this.cnNoteDao.queryById(cnNoteId);
    }

    /**
     * 查询多条数据
     *
     * @param offset 查询起始位置
     * @param limit  查询条数
     * @return 对象列表
     */
    @Override
    public List<CnNote> queryAllByLimit(int offset, int limit) {
        return this.cnNoteDao.queryAllByLimit(offset, limit);
    }

    @Override
    public List<CnNote> queryAll(CnNote cnNote) {
        return this.cnNoteDao.queryAll(cnNote);
    }

    /**
     * 新增数据
     *
     * @return 实例对象
     */
    @Override
    public NoteResult<CnNote> insert(String userId, String bookId, String title){
        CnNote note=new CnNote();
        //用户ID
        note.setCnUserId(userId);
        //笔记本ID
        note.setCnNotebookId(bookId);
        //笔记本标题
        note.setCnNoteTitle(title);
        //笔记Id
        String noteId= NoteUtil.createId();
        note.setCnNoteId(noteId);
        //笔记内容
        note.setCnNoteBody("");
        //创建时间
        Date time = new Date(System.currentTimeMillis());
        note.setCnNoteCreateTime(time);
        //最后修改事件
        note.setCnNoteLastModifyTime(time);
        //约定1-normal 2-delete
        note.setCnNoteStatusId("1");
        //约定1-normal 2-favor 3-share
        note.setCnNoteTypeId("1");
        cnNoteDao.insert(note);
        NoteResult<CnNote> result = new NoteResult<CnNote>();
        result.setStatus(0);
        result.setMsg("创建笔记成功");
        result.setData(note);
        return result;
    }

    @Override
    public NoteResult<Object> update(String noteId, String title, String body) {
        //创建note参数
        CnNote note=new CnNote();
        note.setCnNoteId(noteId);
        note.setCnNoteTitle(title);
        note.setCnNoteBody(body);
        NoteResult<Object> result = new NoteResult<>();
        Date time = new Date(System.currentTimeMillis());
        note.setCnNoteLastModifyTime(time);
        //更新数据库记录
        int rows = cnNoteDao.update(note);
        //构建result
        if(rows==1) {
            result.setStatus(0);
            result.setMsg("保存笔记成功");
            return result;
        }else {
            result.setStatus(1);
            result.setMsg("保存笔记失败");
            return result;
        }

    }

    /**
     * 通过主键删除数据
     *
     * @param cnNoteId 主键
     * @return 是否成功
     */
    @Override
    public NoteResult deleteById(String cnNoteId) {
        CnNote note = new CnNote();
        note.setCnNoteId(cnNoteId);
        note.setCnNoteStatusId("2");
        //更新操作
        int rows = cnNoteDao.dynamicUpdate(note);
        //创建返回结果
        NoteResult result = new NoteResult();
        if(rows >= 1){//成功
            result.setStatus(0);
            result.setMsg("删除笔记成功");
        }else{
            result.setStatus(1);
            result.setMsg("删除笔记失败");
        }
        return result;
    }

    @Override
    public NoteResult<CnNote> loadNote(String noteId) {
        //返回数据集合
        CnNote note = cnNoteDao.queryById(noteId);
        //构建result
        NoteResult<CnNote> result = new NoteResult<CnNote>();
        if(note==null) {
            result.setMsg("未找到数据!");
            result.setStatus(1);
            return result;
        }else {
            result.setStatus(0);
            result.setMsg("加载笔记信息成功");
            result.setData(note);
            return result;
        }
    }

    @Override
    public NoteResult moveNote(String noteId, String bookId) {
        System.out.println("noteId="+noteId);
        System.out.println("bookId="+bookId);
        CnNote note = new CnNote();
        note.setCnNoteId(noteId);//设置笔记ID
        note.setCnNotebookId(bookId);//设置笔记本ID
//		int rows =
//			noteDao.updateBookId(note);//更新
        int rows = cnNoteDao.dynamicUpdate(note);
        //创建返回结果
        NoteResult result = new NoteResult();
        if(rows>=1){
            result.setStatus(0);
            result.setMsg("转移笔记成功");
        }else{
            result.setStatus(1);
            result.setMsg("转移笔记失败");
        }
        return result;
    }

    @Override
    public NoteResult<List<Map>> loadBookNotes(String bookId) {
        //返回数据集合
        List<Map> list = cnNoteDao.findByBookId(bookId);
        //构建result
        NoteResult<List<Map>> result=new NoteResult<List<Map>>();
        result.setStatus(0);
        result.setMsg("加载笔记成功");
        result.setData(list);
        return result;
    }
}